package define

import (
	"encoding/xml"
	"time"
)

type CSQData struct {
	CSQ     []int    `json:"csq_val"`
	CSQTime []string `json:"csq_time"`
}
type DriverInfo struct {
	ID          int    `json:"id"`
	SN          string `json:"sn"`
	UpdateTime  string `json:"update_time"`
	DrvTime     string `json:"drv_time"`
	Desc        string `json:"desc"`
	SimStatus   int    `json:"sim_status"`
	ModType     string `json:"mod_type"`
	ModVER      string `json:"mod_ver"`
	CSQ         int    `json:"csq"`
	Rate        int    `json:"rate"`
	IMEI        string `json:"imei"`
	IMSI        string `json:"imsi"`
	ICCID       string `json:"iccid"`
	PhoneNum    string `json:"phone_num"`
	BootVer     string `json:"boot_ver"`
	CoreVer     string `json:"core_ver"`
	TeVer       string `json:"te_ver"`
	ModSdkVer   string `json:"mod_sdk_ver"`
	ModCoreVer  string `json:"mod_core_ver"`
	FactoryMode string `json:"factory_mode"`
}

//EventInfo 门禁记录
type DrvInfoData struct {
	DrvInfo DriverInfo `json:"drv_info"`
	CSQData CSQData    `json:"csq"`
}

/*
* 数据格式
 */

//CtlDoor 门信息
type CtlDoor struct {
	ControllerID string `json:"controller_id"`
	DoorNo       int    `json:"door_no"`
}

//Response 回包格式
type Response struct {
	ErrCode int         `json:"err_code"`
	ErrMsg  string      `json:"err_msg"`
	Data    interface{} `json:"data,omitempty"`
}

//TimeSlot 时段信息
type TimeSlot struct {
	Begin string `json:"begin"`
	End   string `json:"end"`
}

//TimeInfo 时间组信息
type TimeInfo struct {
	GroupNo  int        `json:"group_no, omitempty"`
	Week     []int      `json:"week"`
	Timezone []TimeSlot `json:"timezone"`
}

//CardInfo 卡信息
type CardInfo struct {
	CardNo   string `json:"card_no"`
	UserName string `json:"user_name"`
	GroupNo  int    `json:"group_no"`
	Door     []int  `json:"door"`
	Password string `json:"password"`
	CardFlag int    `json:"card_flag"`
}

//DoorInfo 门信息
type DoorInfo struct {
	DoorNo   byte   `json:"door_no"`
	DoorName string `json:"door_name"`
}

//RecordInfo 刷卡事件
type RecordInfo struct {
	Index     int    `json:"index"`
	Time      string `json:"time"`
	CardNo    string `json:"card_no"`
	UserName  string `json:"user_name"`
	Desc      string `json:"desc"`
	Door      byte   `json:"door"`
	Direction int    `json:"direction"`
	Type      int    `json:"type"`
}

//AlarmInfo 告警事件
type AlarmInfo struct {
	Index   int    `json:"index"`
	Time    string `json:"time"`
	AlmDesc string `json:"alm_desc"`
	Door    byte   `json:"door"`
	Type    int    `json:"type"`
	State   int    `json:"state"`
}

//EventInfo 门禁记录
type EventInfo struct {
	RecordLastGet int          `json:"record_last_get"`
	Record        []RecordInfo `json:"record"`
	AlarmLastGet  int          `json:"alarm_last_get"`
	Alarm         []AlarmInfo  `json:"alarm"`
}

//EventHty 历史记录
type EventHty struct {
	RecordCount int          `json:"record_count"`
	Record      []RecordInfo `json:"record"`
	AlarmCount  int          `json:"alarm_count"`
	Alarm       []AlarmInfo  `json:"alarm"`
}

/*
* 配置参数
 */

//Config 配置信息
type Config struct {
	PidFile string `json:"pid_file"`
	ApiCfg  string `json:"api_cfg"`
	ApiURL  IPAddr `json:"api_url"`

	AccessURL     IPAddr        `json:"access_url"`
	AccessTimeout time.Duration `json:"access_timeout"`

	Logger Logger `json:"logger"`
	Db     Db     `json:"db"`
}

//Logger 日志的相关配置
type Logger struct {
	RollType string `json:"roll_type"`
	Dir      string `json:"dir"`
	File     string `json:"file"`
	Count    int32  `json:"count"`
	Size     int64  `json:"size"`
	Unit     string `json:"unit"`
	Level    string `json:"level"`
	Compress int64  `json:"compress"`
}

//Db 数据库的连接信息
type Db struct {
	Type     string `json:"type"`
	User     string `json:"user"`
	Pwd      string `json:"pwd"`
	IP       string `json:"ip"`
	Port     string `json:"port"`
	Database string `json:"database"`
	Charset  string `json:"charset"`
}

//IPAddr IP
type IPAddr struct {
	Network string `json:"network"`
	IP      string `json:"ip"`
	Port    string `json:"port"`
}

type TimeManageInfo struct {
	CurrentTime string `json:"current_time"`
}

type DoorStat struct {
	OpenStat byte `json:"open_stat"`
	RunStat  byte `json:"run_stat"`
	LockStat byte `json:"lock_stat"`
}

//文件信息
type FileInfo struct {
	Name    string `json:"name"`
	Size    string `json:"size"`
	ModTime string `json:"modTime"`
	Type    string `json:"type"`
	Id      string `json:"id"`
	Path    string `json:"path"`
}

type APNList struct {
	XMLName xml.Name `xml:"apns"`
	Version string   `json:"version" xml:"version,attr"`
	UpTime  string   `json:"uptime"`
	ApnNum  int      `json:"apnNum"`
	Apn     []APN    `json:"apn" xml:"apn"`
	//Description string   `xml:",innerxml"`
}

type APN struct {
	Carrier            string `json:"carrier" xml:"carrier,attr"`                           //运营商名称, 显示在APN列表上的名称, 无需太关注
	Mcc                string `json:"mcc" xml:"mcc,attr"`                                   //用于识别用户所在国家
	Mnc                string `json:"mnc" xml:"mnc,attr"`                                   //用于识别国家的运营商
	Apn                string `json:"apn" xml:"apn,attr"`                                   //access point name(接入点名称), 由运营商给出
	ApnType            string `json:"type" xml:"type,attr"`                                 //apn类型, 一般有default, dun, supl, mms, ims, xcap, hos
	Protocol           string `json:"protocol" xml:"protocol,attr"`                         //注网时使用的协议, 一般是IPV4V6, IP, IPV6, 默认是IP
	Persistent         string `json:"persistent" xml:"persistent,attr"`                     //
	PppNumber          string `json:"ppp_number" xml:"ppp_number,attr"`                     //
	Ppp                string `json:"ppp" xml:"ppp,attr"`                                   //
	VisitArea          string `json:"visit_area" xml:"visit_area,attr"`                     //
	ReadOnly           string `json:"read_only" xml:"read_only,attr"`                       //
	Bearer             string `json:"bearer" xml:"bearer,attr"`                             //
	BearerBitmask      string `json:"bearer_bitmask" xml:"bearer_bitmask,attr"`             //
	NetworkTypeBitmask string `json:"network_type_bitmask" xml:"network_type_bitmask,attr"` //
	ProfileId          string `json:"profile_id" xml:"profile_id,attr"`                     //
	ModemCognitive     string `json:"modem_cognitive" xml:"modem_cognitive,attr"`           //
	MaxConns           string `json:"max_conns" xml:"max_conns,attr"`                       //
	MaxConnsTime       string `json:"max_conns_time" xml:"max_conns_time,attr"`             //
	Mtu                string `json:"mtu" xml:"mtu,attr"`                                   //
	OplusManualSelect  string `json:"oplus_manual_select" xml:"oplus_manual_select,attr"`   //
	OplusPaidSelect    string `json:"oplus_paid_select" xml:"oplus_paid_select,attr"`       //
	Authentication     string `json:"authentication" xml:"authentication,attr"`             //
	CarrierEnabled     string `json:"carrier_enabled" xml:"carrier_enabled,attr"`           //
	RoamingProtocol    string `json:"roaming_protocol" xml:"roaming_protocol,attr"`         //漫游时注网时的协议, 类型同protocol
	MmsC               string `json:"mmsc" xml:"mmsc,attr"`                                 //mms专用, mms的服务器
	MmsProxy           string `json:"mmsproxy" xml:"mmsproxy,attr"`                         //mms专用, mms的代理服务器
	MmsPort            string `json:"mmsport" xml:"mmsport,attr"`                           //mms专用, mms的端口
	User               string `json:"user" xml:"user,attr"`                                 //用户名
	Password           string `json:"password" xml:"password,attr"`                         //密码
	AuthType           string `json:"authtype" xml:"authtype,attr"`                         //认证协议, 0: None, 1: PAP, 2: CHAP, 3: PAP or CHAP
	MvnoType           string `json:"mvno_type" xml:"mvno_type,attr"`                       //虚拟运营商类型, 一般为: imsi, spn, gid, pnn(这种类型还没见过), 用于识别是不是mvno
	MvnoMatchData      string `json:"mvno_match_data" xml:"mvno_match_data,attr"`           //虚拟运营商的值, 一般由运营商给出, 根据mvno_type设置
	UserVisible        string `json:"user_visible" xml:"user_visible,attr"`                 //是否显示在ApnSettings UI当中, 0或者false为不显示, 1或者true为显示, 默认是显示
	UserEditable       string `json:"user_editable" xml:"user_editable,attr"`               //是否在ApnEditor UI中可编辑, 0或者false为不可编辑, 1或者true为可编辑, 默认是可编辑
	//Description string `xml:",innerxml"`
}
